今天要來提一下,PHP載入圖片取得RGB與儲存圖片的操作方式
首先,我們可以到這挑選一張自己喜歡的免費無版權的圖片
Pexels
接著,將圖片載入,取得圖片的各位置的RGB
那該怎使用呢,接下來將緩緩跟各位說明
Step1. 使用imagecreatefromjpeg函數
imagecreatefromjpeg:由文件或 URL 創建一個新圖像
imagecreatefromjpeg($filename)
$filename:圖像檔案來源
(這邊我們將挑選下載後的圖片命名為test_image.jpg)
$source_file = "test_image.jpg";
$im = ImageCreateFromJpeg($source_file);
Step2. 取得此圖像的高度與寬度
使用imagesx與imagesy函數
imagesx($image)
imagesx:取得圖像寬度函數
imagesy($image)
imagesy:取得圖像高度函數
$image:圖像資源
$imgw = imagesx($im);
$imgh = imagesy($im);
Step3. 建立將儲存檔案的檔案名稱,這邊使用當下日期時間的md5編碼
$newFilename = md5(date("YmdHis")).".jpg";
Step4. 接著取得當前像素的RGB值,並分別取得出RGB各別值
for ($i=0; $i<$imgw; $i++)
{
for ($j=0; $j<$imgh; $j++)
{
// 取得當前像素的RGB值
$rgb = ImageColorAt($im, $i, $j);
// 取得RGB的各別值
$image_R = ($rgb >> 16) & 0xFF;
$image_G = ($rgb >> 8) & 0xFF;
$image_B = $rgb & 0xFF;
// 印出RGB值
echo "R:$image_R, G:$image_G, B:$image_B<br>";
}
}
再來,將實作把修改過RGB的值轉存為圖片
Step5. 取得將設定的灰階值( 平均值法:Gray = (R+G+B)/3 )
// 取得將設定的灰階值(平均值法:Gray = (R+G+B)/3)
$gray = round(($image_R + $image_G + $image_B) / 3);
Step6. 使用imagecolorallocate函數,給影像給予指定顏色
imagecolorallocate:指定圖片一個顏色,由给定的 RGB 组成
imagecolorallocate ( $image , int $red , int $green , int $blue )
$image:圖像資源
$red:R紅色的數值
$green:G綠色的數值
$blue:B藍色的數值
// 灰階影像特性r=g,b=g(灰階影像 R=G=B)
$val = imagecolorallocate($im, $gray, $gray, $gray);
Step7. 設定灰階值
imagesetpixel設置單個像素
imagesetpixel($image , $x , $y , $color)
$image:圖像資源
$x:x座標
$y:y座標
$color:所指定的顏色值
// 設定灰階值
imagesetpixel ($im, $i, $j, $val);
Step8. 使用imagejpeg函數,將圖像輸出儲存
imagejpeg:輸出圖像到瀏覽器或文件
imagejpeg ( $image, $to )
$image:圖像資源
$to:將要保存圖像的路徑
// 輸出圖像到文件
imagejpeg($im, "./images/$newFilename");
<?php
$source_file = "test_image.jpg";
$im = ImageCreateFromJpeg($source_file);
$imgw = imagesx($im);
$imgh = imagesy($im);
$newFilename = md5(date("YmdHis")).".jpg";
// echo $imgw.",".$imgh."<br>";
for ($i=0; $i<$imgw; $i++)
{
for ($j=0; $j<$imgh; $j++)
{
// 取得當前像素的RGB值
$rgb = ImageColorAt($im, $i, $j);
// 取得RGB的各別值
$image_R = ($rgb >> 16) & 0xFF;
$image_G = ($rgb >> 8) & 0xFF;
$image_B = $rgb & 0xFF;
// 印出RGB各別值
echo "R:$image_R, G:$image_G, B:$image_B <br>";
// 取得將設定的灰階值(平均值法:Gray = (R+G+B)/3)
$gray = round(($image_R + $image_G + $image_B) / 3);
// 灰階影像特性r=g,b=g(灰階影像 R=G=B)
$val = imagecolorallocate($im, $gray, $gray, $gray);
// 設定灰階值
imagesetpixel ($im, $i, $j, $val);
}
}
// 輸出圖像到文件
imagejpeg($im, "./images/$newFilename");
?>
參考來源:
PHP imagecreatefromjpeg
PHP imagesx
PHP imagesy
灰度值
PHP imagecolorallocate
PHP imagesetpixel
PHP imagejpeg